Spring ORM এ Auditing

Java Technologies - স্প্রিং ওআরএম (Spring ORM)
99
99

Spring ORM এ Auditing হল ডেটা সংক্রান্ত তথ্য সংগ্রহের একটি প্রক্রিয়া, যেখানে একটি Entity-এর তৈরি বা আপডেট করার সময় তার সময় (timestamp) এবং ইউজারের (user) তথ্য স্বয়ংক্রিয়ভাবে রেকর্ড করা হয়। এটি সাধারণত ডেটাবেসের মধ্যে ডেটা পরিবর্তন ট্র্যাক করার জন্য ব্যবহৃত হয়, যেমন - রেকর্ড কখন তৈরি হয়েছে, কখন পরিবর্তন হয়েছে, এবং এই পরিবর্তন কারা করেছে।

Spring Data JPA এবং Hibernate উভয়েই Auditing সমর্থন করে, এবং Spring ORM এ এটির সাপোর্ট পাওয়া যায় @EntityListeners অ্যানোটেশন এবং @CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy অ্যানোটেশন ব্যবহার করে।


Spring ORM এ Auditing কনফিগারেশন

Spring ORM এ Auditing সক্ষম করতে কিছু স্টেপ অনুসরণ করতে হয়।

1. Auditing সক্রিয় করা

@EnableJpaAuditing ব্যবহার

প্রথমে Spring Boot অ্যাপ্লিকেশনে Auditing সক্রিয় করতে হবে। এর জন্য @EnableJpaAuditing অ্যানোটেশন ব্যবহার করতে হয়।

import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableJpaAuditing
public class SpringOrmApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringOrmApplication.class, args);
    }
}

2. Auditing ফিল্ডে অ্যানোটেশন ব্যবহার

Entity-এ Auditing ফিল্ড যোগ করা

ডেটাবেস টেবিলের জন্য যে Entity ক্লাস তৈরি করা হবে, সেখানে @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশন যোগ করতে হবে।

  • @CreatedDate: রেকর্ড তৈরি হওয়ার সময়।
  • @LastModifiedDate: রেকর্ড আপডেট হওয়ার সময়।
  • @CreatedBy: রেকর্ড তৈরি করা ব্যক্তি।
  • @LastModifiedBy: রেকর্ড আপডেট করা ব্যক্তি।

উদাহরণ: Entity-এ Auditing

import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "price")
    private Double price;

    @CreatedDate
    @Column(name = "created_date", updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    @Column(name = "modified_date")
    private LocalDateTime modifiedDate;

    // Getters and Setters
}

3. AuditorAware ইমপ্লিমেন্ট করা

@CreatedBy এবং @LastModifiedBy ফিল্ডগুলির জন্য ব্যবহারকারীর তথ্য সংগ্রহ করতে AuditorAware ইন্টারফেস ইমপ্লিমেন্ট করতে হয়। এটি Spring Security বা কাস্টম মেথড দ্বারা প্রাপ্ত করা যেতে পারে।

AuditorAware ইন্টারফেস ইমপ্লিমেন্ট

import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // Here we are simulating getting the current user
        // In a real application, this could be retrieved from Spring Security
        return Optional.of("admin"); // Example: Hardcoded "admin", replace with actual user logic
    }
}

4. Entity-এ @CreatedBy এবং @LastModifiedBy ব্যবহার

এখন @CreatedBy এবং @LastModifiedBy অ্যানোটেশন Entity ক্লাসে ব্যবহার করা যেতে পারে।

import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;

@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "price")
    private Double price;

    @CreatedDate
    @Column(name = "created_date", updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    @Column(name = "modified_date")
    private LocalDateTime modifiedDate;

    @CreatedBy
    @Column(name = "created_by")
    private String createdBy;

    @LastModifiedBy
    @Column(name = "modified_by")
    private String modifiedBy;

    // Getters and Setters
}

5. Repository এবং Service ক্লাস

Repository

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
}

Service

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    @Transactional
    public Product createProduct(Product product) {
        return productRepository.save(product);
    }

    @Transactional
    public Product updateProduct(Long id, Double newPrice) {
        Product product = productRepository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));
        product.setPrice(newPrice);
        return productRepository.save(product);
    }
}

Spring ORM এ Auditing এর সুবিধা

বৈশিষ্ট্যসুবিধা
ডেটা ট্র্যাকিংডেটার সৃষ্টি ও পরিবর্তন সঠিকভাবে ট্র্যাক করা যায়।
অটোমেটিক টাইমস্ট্যাম্পিং@CreatedDate এবং @LastModifiedDate দ্বারা সময় সেভ করা হয়।
ডেটা মালিকানা@CreatedBy এবং @LastModifiedBy দ্বারা ব্যবহারকারী চিহ্নিত করা হয়।

Spring ORM এ Auditing ব্যবহার করে আপনি একটি Entity-এর তৈরি এবং আপডেট সম্পর্কিত সময় এবং ব্যবহারকারীর তথ্য স্বয়ংক্রিয়ভাবে সংগ্রহ করতে পারবেন। এটি ডেটাবেস পরিবর্তনের ইতিহাস ট্র্যাক করতে এবং ডেটার কনসিস্টেন্সি বজায় রাখতে সহায়ক।

Content added By

Spring Data JPA এর মাধ্যমে Auditing কনফিগার করা

61
61

Spring ORM ব্যবহারের সময় কিছু নির্দিষ্ট Best Practices অনুসরণ করলে পারফরম্যান্স বৃদ্ধি পায়, কোডের মান উন্নত হয় এবং ডেটাবেজের সাথে কার্যকরী সম্পর্ক স্থাপন করা যায়। এই Best Practices গুলি Spring ORM এবং Hibernate এর সঠিক ব্যবহার নিশ্চিত করে এবং ডেভেলপমেন্ট প্রক্রিয়াকে সহজ ও দক্ষ করে তোলে।


১. Transaction Management ব্যবহার করুন

Spring ORM এর অন্যতম শক্তিশালী ফিচার হল এর Transaction Management। এটি নিশ্চিত করে যে, সমস্ত ডেটাবেজ অপারেশন একত্রে সফল হবে বা ব্যর্থ হলে পুরো টানজেকশন রোলব্যাক হবে।

উদাহরণ:

@Transactional
public void saveEmployee(Employee employee) {
    sessionFactory.getCurrentSession().save(employee);
}

Best Practice:

  • সব ডেটাবেজ অপারেশন @Transactional অ্যানোটেশন ব্যবহার করে করুন।
  • Transaction Management এর সাহায্যে ডেটাবেজে অখণ্ডতা বজায় রাখুন।

২. Lazy Loading এবং Eager Loading এর মধ্যে সঠিক ভারসাম্য বজায় রাখুন

Hibernate এর Lazy Loading এবং Eager Loading দুইটি সাধারণ লোডিং স্ট্র্যাটেজি। Lazy Loading শুধুমাত্র যখন প্রয়োজন হয়, তখন সম্পর্কিত অবজেক্টগুলো লোড করে, যা কর্মক্ষমতা বৃদ্ধি করে। তবে, প্রয়োজন না থাকলে Lazy Loading অতিরিক্ত কোয়েরি তৈরি করতে পারে, যা পারফরম্যান্স হ্রাস করতে পারে।

উদাহরণ:

@OneToMany(fetch = FetchType.LAZY)
private List<Order> orders;

Best Practice:

  • Lazy Loading ব্যবহার করুন যখন সম্পর্কিত অবজেক্ট প্রয়োজনীয় না হয়।
  • তবে, Eager Loading ব্যবহার করুন যখন সম্পর্কিত ডেটা বারবার অ্যাক্সেস করতে হয়।

৩. Batch Processing ব্যবহার করুন

যখন একাধিক ডেটাবেজ অপারেশন করতে হয়, তখন Batch Processing পারফরম্যান্স বৃদ্ধি করতে সহায়ক। এটি একাধিক ইনসার্ট, আপডেট বা ডিলিট অপারেশন একত্রে সম্পন্ন করে, যার ফলে ডেটাবেজের উপর চাপ কমে যায়।

উদাহরণ:

@Transactional
public void saveEmployeesBatch(List<Employee> employees) {
    Session session = sessionFactory.getCurrentSession();
    int batchSize = 20;
    for (int i = 0; i < employees.size(); i++) {
        session.save(employees.get(i));
        if (i % batchSize == 0) {
            session.flush();
            session.clear();
        }
    }
}

Best Practice:

  • ব্যাচ সাইজ ঠিকভাবে কনফিগার করুন (যেমন, ২০) যাতে কর্মক্ষমতা বজায় থাকে।
  • বড় সংখ্যক রেকর্ড নিয়ে কাজ করার সময় Batch Processing ব্যবহার করুন।

৪. Proper Indexing এবং Query Optimization ব্যবহার করুন

ডেটাবেজে ইনডেক্সিং ডেটার অনুসন্ধান দ্রুত করতে সাহায্য করে। Hibernate বা JPA ব্যবহার করার সময়, ডেটাবেজের Proper Indexing নিশ্চিত করতে হবে।

Best Practice:

  • প্রায়ই ব্যবহার করা কলামগুলোর জন্য ইনডেক্স তৈরি করুন।
  • Lazy Loading এর সাথে অতিরিক্ত N+1 Select সমস্যা এড়াতে fetch join বা batch fetching ব্যবহার করুন।
  • কোয়েরি অপটিমাইজেশনে মনোযোগ দিন এবং unnecessary join গুলি এড়িয়ে চলুন।

৫. Clear Session After Processing

Hibernate এর session ক্যাশে তথ্য রাখে। একাধিক ডেটাবেজ অপারেশন সম্পন্ন করার পরে, Hibernate এর ক্যাশ পরিষ্কার করা উচিত। এটি মেমোরি ব্যবহারের দক্ষতা বাড়ায় এবং OutOfMemoryError এড়াতে সাহায্য করে।

উদাহরণ:

@Transactional
public void processEmployees(List<Employee> employees) {
    Session session = sessionFactory.getCurrentSession();
    for (Employee employee : employees) {
        session.save(employee);
    }
    session.flush();
    session.clear(); // ক্যাশ পরিষ্কার করুন
}

Best Practice:

  • session.clear() ব্যবহার করে Hibernate ক্যাশ পরিষ্কার করুন।
  • একাধিক রেকর্ড সেভ করার পরে flush() এবং clear() ব্যবহার করুন।

৬. DTO (Data Transfer Object) ব্যবহার করুন

JPA Entity ক্লাসগুলি প্রায়ই বড় হয়ে থাকে এবং শুধুমাত্র প্রয়োজনীয় ডেটা ফ্রন্টএন্ডে পাঠানোর জন্য DTO (Data Transfer Object) ব্যবহার করা উচিত। এটি পারফরম্যান্স উন্নত করতে সাহায্য করে এবং UI এর জন্য কাস্টম ডেটা মডেল তৈরি করতে সহায়ক।

উদাহরণ:

public class EmployeeDTO {
    private String name;
    private double salary;
    
    // Getters and Setters
}

Best Practice:

  • Entity ক্লাসের পরিবর্তে DTO ব্যবহার করুন যখন UI বা API থেকে কেবল কিছু নির্বাচিত ডেটা প্রয়োজন।
  • DTO ব্যবহার করে অপ্রয়োজনীয় ডেটা পাঠানো এড়িয়ে চলুন।

৭. Use Caching for Read-Heavy Applications

Hibernate এর Second-Level Cache এবং Query Cache ব্যবহার করলে ডেটাবেজে একাধিকবার একই কোয়েরি না পাঠিয়ে কর্মক্ষমতা উন্নত করা সম্ভব।

Best Practice:

  • Second-Level Cache ব্যবহার করুন যদি আপনার অ্যাপ্লিকেশন রিড-হেভি হয়।
  • Query Cache ব্যবহার করুন যদি একই কোয়েরি বারবার চলে।

৮. Proper Exception Handling

Spring ORM এ ডেটাবেজ অপারেশন করার সময় উপযুক্ত exception handling করা গুরুত্বপূর্ণ। Hibernate এর exception গুলি JPAException বা DataAccessException এর মাধ্যমে হ্যান্ডেল করা উচিত।

Best Practice:

  • ডেটাবেজ সম্পর্কিত SQLExceptions বা DataAccessException এর জন্য কাস্টম এক্সসেপশন তৈরি করুন।
  • ব্যবহারকারীর কাছে স্পষ্ট ও নিরাপদ বার্তা প্রদান করুন।

সারাংশ

Spring ORM এর মাধ্যমে উন্নত পারফরম্যান্স এবং কার্যকরী ডেটাবেজ অপারেশন নিশ্চিত করতে কিছু Best Practices অনুসরণ করা উচিত। সঠিকভাবে Transaction Management, Lazy Loading, Batch Processing, এবং Proper Indexing ব্যবহার করলে ডেটাবেজ এবং অ্যাপ্লিকেশন পারফরম্যান্স উন্নত হয় এবং ডেভেলপমেন্ট প্রক্রিয়া আরো সহজ ও দক্ষ হয়।

Content added By

@CreatedDate এবং @LastModifiedDate Annotation এর ব্যবহার

83
83

@CreatedDate এবং @LastModifiedDate কি?

@CreatedDate এবং @LastModifiedDate হল দুটি Spring Data JPA অ্যানোটেশন, যা ডেটাবেজে created timestamp (তৈরির সময়) এবং last modified timestamp (শেষ পরিবর্তনের সময়) স্বয়ংক্রিয়ভাবে সংরক্ষণ করতে ব্যবহৃত হয়।

  • @CreatedDate: এই অ্যানোটেশনটি একটি ফিল্ডে ব্যবহৃত হয়, যা একটি Entity তৈরি করার সময় স্বয়ংক্রিয়ভাবে create টাইমস্ট্যাম্প রাখে।
  • @LastModifiedDate: এই অ্যানোটেশনটি Entity এর একটি ফিল্ডে ব্যবহৃত হয়, যা Entity আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে last modified টাইমস্ট্যাম্প রাখে।

এই অ্যানোটেশনগুলোর মাধ্যমে আপনি Audit Trails তৈরি করতে পারেন, যা Entity-র তারিখ এবং সময়ের তথ্য সংগ্রহ করে।


প্রয়োজনীয় কনফিগারেশন

Spring Data JPA এর সাথে এই অ্যানোটেশনগুলো ব্যবহারের জন্য Auditing সক্ষম করতে হবে। এই জন্য নিচের ধাপগুলো অনুসরণ করতে হবে:


ধাপ ১: Auditing কনফিগারেশন সক্রিয় করা

Spring Boot এ Auditing সক্রিয় করার জন্য @EnableJpaAuditing অ্যানোটেশন ব্যবহার করতে হবে। সাধারণত এটি মূল অ্যাপ্লিকেশন ক্লাসে বা কনফিগারেশন ক্লাসে যুক্ত করা হয়।

Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

ধাপ ২: Entity ক্লাসে @CreatedDate এবং @LastModifiedDate ব্যবহার

এরপর Entity ক্লাসে @CreatedDate এবং @LastModifiedDate অ্যানোটেশন ব্যবহার করতে হবে। এছাড়া, @EntityListeners(AuditingEntityListener.class) অ্যানোটেশনটি যুক্ত করতে হবে যাতে Spring Auditing এর কার্যকারিতা সচল থাকে।

Employee.java

import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import java.time.LocalDateTime;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String department;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public LocalDateTime getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(LocalDateTime createdDate) {
        this.createdDate = createdDate;
    }

    public LocalDateTime getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(LocalDateTime lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
}

ধাপ ৩: @CreatedDate এবং @LastModifiedDate এর ব্যবহার

যখন আপনি নতুন একটি Entity তৈরি করবেন, তখন @CreatedDate স্বয়ংক্রিয়ভাবে createdDate ফিল্ডে তারিখ এবং সময় সেট করবে। আর যখন Entity আপডেট হবে, তখন @LastModifiedDate স্বয়ংক্রিয়ভাবে lastModifiedDate ফিল্ডে বর্তমান তারিখ এবং সময় সেট করবে।


উদাহরণ ১: Employee Entity তৈরি এবং সংরক্ষণ

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee createEmployee(String name, String department) {
        Employee employee = new Employee();
        employee.setName(name);
        employee.setDepartment(department);
        return employeeRepository.save(employee);
    }
}

এখানে, যখন createEmployee মেথডটি কল হবে, তখন নতুন Employee Entity তৈরি হবে এবং createdDate স্বয়ংক্রিয়ভাবে পূর্ণ হবে।


উদাহরণ ২: Employee Entity আপডেট করা

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee updateEmployee(Long id, String name, String department) {
        Employee employee = employeeRepository.findById(id).orElseThrow(() -> new RuntimeException("Employee not found"));
        employee.setName(name);
        employee.setDepartment(department);
        return employeeRepository.save(employee);
    }
}

এখানে, যখন updateEmployee মেথডটি কল হবে, তখন lastModifiedDate স্বয়ংক্রিয়ভাবে আপডেট হবে।


ধাপ ৪: Repository ক্লাস

Spring Data JPA এর CrudRepository অথবা JpaRepository ইন্টারফেস ব্যবহার করে Entity ম্যানেজমেন্ট করা যায়। EmployeeRepository ক্লাসের জন্য, নিচে একটি উদাহরণ দেওয়া হলো:

EmployeeRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

@CreatedDate এবং @LastModifiedDate এর সুবিধা

১. স্বয়ংক্রিয় টাইমস্ট্যাম্প

এই অ্যানোটেশনগুলোর মাধ্যমে আপনি Entity এর জন্য created এবং modified টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে সংগ্রহ করতে পারেন, যা ডেটা অডিটিং এবং ট্র্যাকিং এর জন্য উপকারী।

২. পারফরম্যান্স উন্নয়ন

Spring Data JPA এর মাধ্যমে টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে সংরক্ষণ করা যায়, ফলে ডেভেলপারদের জন্য এটি খুবই সুবিধাজনক এবং কোনো অতিরিক্ত কোড লেখা প্রয়োজন হয় না।

৩. ডেটাবেজ ট্র্যাকিং

ডেটাবেজে কোনো Entity কখন তৈরি এবং কখন পরিবর্তিত হয়েছে তা সহজে ট্র্যাক করা যায়।


সারাংশ

@CreatedDate এবং @LastModifiedDate অ্যানোটেশনগুলোর সাহায্যে Spring ORM এ Entity-এর টাইমস্ট্যাম্প গুলো স্বয়ংক্রিয়ভাবে সংরক্ষণ করা সম্ভব। এই অ্যানোটেশনগুলো ব্যবহার করে আপনি ডেটাবেজে Entity-র তৈরি এবং শেষ আপডেট সময়ের তথ্য ট্র্যাক করতে পারেন, যা বিশেষভাবে অডিটিং এবং ডেটা ম্যানেজমেন্টের জন্য গুরুত্বপূর্ণ।

Content added By

উদাহরণ সহ Auditing বাস্তবায়ন

56
56

Auditing হল একটি প্রক্রিয়া যা ডেটাবেসে রেকর্ড করা কোনো সত্তার সৃষ্টি (creation), পরিবর্তন (modification), অথবা মুছে ফেলার (deletion) সময় ট্র্যাক করে। Spring ORM এবং Hibernate ব্যবহার করে Auditing কার্যকরভাবে বাস্তবায়ন করা যায়। Spring Data JPA এ @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশনগুলো দিয়ে এই কাজটি করা যায়।


Maven ডিপেনডেন্সি

Spring Data JPA এবং Auditing এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.5.4</version>
</dependency>

Auditing কনফিগারেশন

Spring Data JPA-তে auditing সক্রিয় করার জন্য প্রথমে @EnableJpaAuditing অ্যানোটেশন ব্যবহার করতে হবে এবং এর সাথে AuditorAware ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।

Auditing কনফিগারেশন (Java-based)

@Configuration
@EnableJpaAuditing
public class JpaConfig {
    @Bean
    public AuditorAware<String> auditorProvider() {
        return new AuditorAwareImpl();
    }
}

AuditorAwareImpl ক্লাস তৈরি করা

AuditorAware ইন্টারফেস ইমপ্লিমেন্ট করে ব্যবহারকারীর তথ্য ট্র্যাক করা হয়। উদাহরণস্বরূপ, এই ক্লাসে ব্যবহারকারী হিসাবে Admin ব্যবহৃত হয়েছে, তবে আপনি এটি বাস্তবিক অ্যাপ্লিকেশনে নিরাপত্তা প্রেক্ষিতে কাস্টমাইজ করতে পারেন।

@Component
public class AuditorAwareImpl implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // এখানে বর্তমান ব্যবহারকারী ফিরিয়ে দেওয়া হবে, যেমন "Admin"
        return Optional.of("Admin");
    }
}

Entity ক্লাসে Auditing অ্যানোটেশন যোগ করা

Auditing তথ্য সংগ্রহ করতে @CreatedDate, @LastModifiedDate, @CreatedBy, এবং @LastModifiedBy অ্যানোটেশন ব্যবহার করা হয়।

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    @CreatedDate
    @Column(name = "created_date")
    private LocalDateTime createdDate;

    @LastModifiedDate
    @Column(name = "last_modified_date")
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    @Column(name = "created_by")
    private String createdBy;

    @LastModifiedBy
    @Column(name = "last_modified_by")
    private String lastModifiedBy;

    // Getters and Setters
}

রেপোজিটরি তৈরি করা

Spring Data JPA রেপোজিটরি ব্যবহার করে User সত্তার উপর CRUD অপারেশন সম্পাদন করা হয়। এখানে JpaRepository ব্যবহার করা হচ্ছে।

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

সার্ভিস লেয়ার তৈরি করা

ডেটাবেসে রেকর্ড তৈরি ও আপডেট করার জন্য সার্ভিস লেয়ার তৈরি করা হয়।

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public User updateUser(User user) {
        return userRepository.save(user);
    }
}

কন্ট্রোলার লেয়ার তৈরি করা

REST API বা MVC কন্ট্রোলার লেয়ারে ডেটা গ্রহণ ও ফেরত দেওয়ার জন্য কন্ট্রোলার তৈরি করা হয়।

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public ResponseEntity<User> addUser(@RequestBody User user) {
        User savedUser = userService.saveUser(user);
        return ResponseEntity.ok(savedUser);
    }

    @PutMapping("/update")
    public ResponseEntity<User> updateUser(@RequestBody User user) {
        User updatedUser = userService.updateUser(user);
        return ResponseEntity.ok(updatedUser);
    }
}

Auditing তথ্যের ফলাফল

যখন User এন্টিটি তৈরি বা আপডেট করা হয়, তখন createdDate, lastModifiedDate, createdBy, এবং lastModifiedBy কলামগুলো স্বয়ংক্রিয়ভাবে পূর্ণ হবে।

উদাহরণ:

  1. User তৈরি করা হলে:
    createdDate এবং createdBy ফিল্ড পূর্ণ হবে।
  2. User আপডেট হলে:
    lastModifiedDate এবং lastModifiedBy ফিল্ড পূর্ণ হবে।

Auditing এর সুবিধা

  1. ডেটার ইতিহাস ট্র্যাকিং: Auditing ব্যবহার করে সিস্টেমে করা প্রতিটি পরিবর্তনের ইতিহাস রাখা যায়।
  2. ব্যবহারকারীর আইডেন্টিটি: কোন ব্যবহারকারী ডেটা তৈরি বা আপডেট করেছে তা জানার সুবিধা।
  3. কমপ্লায়েন্স ও অডিটিং: নিরাপত্তা এবং নিয়ন্ত্রণের জন্য সিস্টেমের সব পরিবর্তন ট্র্যাক করা যায়।

Spring ORM এবং Hibernate এর মাধ্যমে Auditing বাস্তবায়ন করার মাধ্যমে আপনি একটি সিস্টেমে ডেটা পরিবর্তন এবং এর ইতিহাস সঠিকভাবে ট্র্যাক করতে পারবেন।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion